#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020/11/14 11:03
# @Author : youngchaolin

# findall和search方法

import re

ret = re.findall('\d+', '123abc456')
print(ret)

ret = re.search('\d+9', '123abc456')
# print(ret) # 变量
# print(ret.group())

# 没有search到可能会报错，需要加条件,没有匹配到就是None
if ret:
    print(ret)
    print(ret.group())

print('---现象寻答案,跟分组()有关系---')
# 看一个现象，并且发现答案
# findall总是只显示括号里面匹配到的内容
ret = re.findall('1(\d)(\d)', '123abc456')
print(ret)
# search但是还是按照完整的正则进行匹配,显示也只显示第一个匹配到的内容，但是可以通过group参数进行传参
ret = re.search('1(\d)(\d)', '123abc456')
if ret:
    print(ret)
    print(ret.group())  # 和group(0)一样的结果
    print(ret.group(1))  # 匹配到第一个分组中的内容
    print(ret.group(2))  # 匹配到第二个分组中的内容

# 为什么在search中不需要分组优先，而在findall中需要
# search中可以通过group传参的方式获取提取的内容，而findall得到的是一个列表，再通过列表获取想要提取的内容，因此
# findall需要优先分组，给括号括起来的那个就是提取的内容，search不需要，想要谁传入对应位置的group参数即可

# findall加上括号，是为了对真正需要的内容进行筛选
ret = re.findall('<\w+>\w+</\w+>', '<span>boe</span>')
print(ret)

ret = re.findall('<\w+>(\w+)</\w+>', '<span>boe</span>')
print(ret)

ret = re.search('<\w+>(\w+)</\w+>', '<span>boe</span>')
print(ret.group())
print(ret.group(1))


# 为什么要用分组，以及findall的分组优先有什么好处
exp = '2-3*(5+6)'
# 匹配a-b就计算a-b，匹配到a+b就计算a+b
# ret=re.search('\d+[+]\d+',exp)
# print(ret)
# a,b=ret.split('+')
# print(int(a)+int(b))
ret=re.search('(\d+)[+](\d+)',exp)
print(int(ret.group(1))+int(ret.group(2)))

# ret=int(re.findall('(\d+)[+]\d+',exp)[0])+int(re.findall('\d+[+](\d+)',exp)[0])
# print(ret)

# 真实场景，获取豆瓣电影评分电影名
movies=[]
with open('豆瓣电影.html',mode='r',encoding='utf-8') as f:
    content=f.read()
    ret=re.findall('<span class="title">(\w+)</span>',content)
    print(ret)


# 取消优先分组，使用?:
ret=re.findall('1(?:\d)(\d)','123')
print(ret) # ['3']

# 什么是爬虫
'''
通过代码获取一个网页的源码，要的是源码中嵌套中的内容
分组和findall的现象
  为什么要分分组，把想要的内容放到分组里
如何取消优先分组
  如果在写正则的时候不得不想把不要的内容也写入到正则里，可以使用?:取消优先分组不展示
'''

import requests
ret=requests.get('https://www.boe.com')
print(ret.text)
